package task_pool

import (
	"channel/task_pool/task"
	"context"
	"time"
)

var (
	defaultIdleTimeout = time.Second * 30

	StateCreated int32 = 0
	StateRunning int32 = 1
	StateClosing int32 = 2
	StateStopped int32 = 3
	StateLocked  int32 = 4
)

type State struct {
	State int32 // taskPool当前状态

	RunningTaskNum  int32 // 运行中的任务数量
	WaitingTasksNum int32 // 缓存中的任务数量
	TaskCap         int32 // 缓存容量

	NumG int32 // 当前启动的goroutine数量

	TimeStamp int64 // 快照时间
}

type TaskPool interface {
	// Submit 提交任务 taskPool创建和运行中允许提交任务
	Submit(ctx context.Context, task task.Task) error
	// Start 启动taskPool
	Start() error
	// Shutdown 优雅退出 等待任务处理完成后结束
	Shutdown() (<-chan struct{}, error)
	// ShutdownNow 立即退出 立即退出后，返回未处理任务
	ShutdownNow() ([]task.Task, error)
	// States 定时快照
	States(ctx context.Context, interval time.Duration) (<-chan State, error)
}
